﻿import db

cache=50000

class _1sentry:
	"This class contains functions to import data from ODBC into mysql"
	#beginning of class suite
	
	def extract():
		"This function extracts data from ODBC into cursor"
		#print (_1sentry.extract.__doc__)
		#beginning of function suite
		# Выполнение запроса на выборку из таблицы 1SENTRY
		db.odbc.cursor.execute('''SELECT docid, number, corno, ALLTRIM(STR(year(date)))+'-'+ALLTRIM(STR(month(date)))+'-'+ALLTRIM(STR(day(date))) as "date", time, accdtid, accktid, sum, currid, cursum, amount, provkind, active, dtsc0, dtsc1, dtsc2, ktsc0, ktsc1, ktsc2 FROM 1SENTRY;''')
		#end of function suite
		#Функция создает курсор и ничего не возвращает
		return

	def fetch(n):
		"This function fetches data from cursor"
		#print (_1sentry.fetch.__doc__)
		#beginning of function suite
		#end of function suite
		#Функция возвращает следующие n строк из курсора
		return db.odbc.cursor.fetchmany(n)

	def fetchall():
		"This function fetches all data from cursor"
		#print (_1sentry.fetchall.__doc__)
		#beginning of function suite
		#end of function suite
		#Функция возвращает все строки из курсора
		return db.odbc.cursor.fetchall()

	def transform(array):
		"This function transforms data from array"
		#print (_1sentry.transform.__doc__)
		#beginning of function suite
		#Создается пустой массив rows
		rows=[]
		#Для каждого элемента-списка массива rows:
		for item in array:
			#Создается пустой список row
			row=[]
			#В список добавляются декодированные при необходимости в utf-8 элементы списка item
			row.append(item[0].decode('cp1251'))
			row.append(item[1])
			row.append(item[2])
			row.append(item[3].decode('cp1251'))
			row.append(item[4].decode('cp1251'))
			row.append(item[5].decode('cp1251'))
			row.append(item[6].decode('cp1251'))
			row.append(item[7])
			row.append(item[8].decode('cp1251'))
			row.append(item[9])
			row.append(item[10])
			row.append(item[11].decode('cp1251'))
			row.append(item[12].decode('cp1251'))
			row.append(item[13].decode('cp1251'))
			row.append(item[14].decode('cp1251'))
			row.append(item[15].decode('cp1251'))
			row.append(item[16].decode('cp1251'))
			row.append(item[17].decode('cp1251'))
			row.append(item[18].decode('cp1251'))
			#В массив rows добавляется список row
			rows.append(row)
		#end of function suite
		#Функция возвращает массив rows
		return rows

	def insert(rows):
		"This function inserts into mysql"
		#print (_1sentry.insert.__doc__)
		#beginning of function suite
		#Подключение к базе данных mysql
		db.mysql.connect()
		#В таблицу 1s_1sentry в mysql добавляется массив rows
		db.mysql.cursor.executemany("INSERT INTO 1s_1sentry(docid, number, corno, date, time, accdtid, accktid, sum, currid, cursum, amount, provkind, active, dtsc0, dtsc1, dtsc2, ktsc0, ktsc1, ktsc2) VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",rows)
		#Отключение от базы данных mysql
		db.mysql.disconnect()
		#end of function suite
		#Функция вставляет строки и ничего не возвращает
		return

	def delete():
		"This function deletes all records in mysql table"
		#print (_1sentry.delete.__doc__)
		#beginning of function suite
		#Подключение к базе данных mysql
		db.mysql.connect()
		#Из таблицы 1s_1sentry в mysql удаляются все записи:
		db.mysql.cursor.execute("DELETE FROM 1s_1sentry")
		#Отключение от базы данных mysql
		db.mysql.disconnect()
		#end of function suite
		#Функция удаляет строки и ничего не возвращает
		return

	#def update_old(cache=basic.cache):
	#	"This function updates data in mysql from ODBC"
	#	#print (_1sentry.update_old.__doc__)
	#	#beginning of function suite
	#	_1sentry.delete()
	#	odbc.connect()
	#	_1sentry.extract()
	#	array=_1sentry.fetch(cache)
	#	while array!=[]:
	#		_1sentry.insert(_1sentry.transform(array))
	#		array=_1sentry.fetch(cache)
	#	odbc.disconnect()
	
	def update(cache=cache):
		"This function updates data in mysql from ODBC"
		#print (_1sentry.update.__doc__)
		#beginning of function suite
		records=0
		_1sentry.delete()
		db.odbc.connect()
		_1sentry.extract()
		array=_1sentry.fetch(cache)
		while array!=[]:
			records=records+len(array)
			_1sentry.insert(array)
			array=_1sentry.fetch(cache)
		db.odbc.disconnect()
		#end of function suite
		#Функция обновляет таблицу и ничего не возвращает
		return records
	
	#end of class suite
	
class _1saccs:
	"This class contains functions to import data from ODBC into mysql"
	#beginning of class suite
	
	def extract():
		"This function extracts data from ODBC into cursor"
		#print (_1saccs.extract.__doc__)
		#beginning of function suite
		# Выполнение запроса на выборку из таблицы 1SACCS
		db.odbc.cursor.execute('''SELECT 
		id, planid, schkod, 
		schim, schv, schkol, 
		schsingle, isfolder, ismark, 
		level, mdid, active, verstamp, 
		sc0, osc0, fsc0, 
		sc1, osc1, fsc1,
		sc2, osc2, fsc2 FROM 1saccs;''')
		#end of function suite
		#Функция создает курсор и ничего не возвращает
		return

	def fetch(n):
		"This function fetches data from cursor"
		#print (_1saccs.fetch.__doc__)
		#beginning of function suite
		#end of function suite
		#Функция возвращает следующие n строк из курсора
		return db.odbc.cursor.fetchmany(n)

	def fetchall():
		"This function fetches all data from cursor"
		#print (_1saccs.fetchall.__doc__)
		#beginning of function suite
		#end of function suite
		#Функция возвращает все строки из курсора
		return db.odbc.cursor.fetchall()

	def transform(array):
		"This function transforms data from array"
		#print (_1saccs.transform.__doc__)
		#beginning of function suite
		#Создается пустой массив rows
		rows=[]
		#Для каждого элемента-списка массива rows:
		for item in array:
			#Создается пустой список row
			row=[]
			#В список добавляются декодированные при необходимости в utf-8 элементы списка item
			row.append(item[0])
			row.append(item[1])
			row.append(item[2])
			row.append(item[3].decode('cp1251'))
			row.append(item[4])
			row.append(item[5])
			row.append(item[6])
			row.append(item[7])
			row.append(item[8])
			row.append(item[9])
			row.append(item[10])
			row.append(item[11])
			row.append(item[12])
			row.append(item[13])
			row.append(item[14])
			row.append(item[15])
			row.append(item[16])
			row.append(item[17])
			row.append(item[18])
			row.append(item[19])
			row.append(item[20])
			row.append(item[21])
			#В массив rows добавляется список row
			rows.append(row)
		#end of function suite
		#Функция возвращает массив rows
		return rows

	def insert(rows):
		"This function inserts into mysql"
		#print (_1saccs.transform.__doc__)
		#beginning of function suite
		#Подключение к базе данных mysql
		db.mysql.connect()
		#В таблицу 1s_1saccs в mysql добавляется массив rows
		db.mysql.cursor.executemany("INSERT INTO 1s_1saccs(id, planid, schkod, schim, schv, schkol, schsingle, isfolder, ismark, level, mdid, active, verstamp, sc0, osc0, fsc0, sc1, osc1, fsc1, sc2, osc2, fsc2) VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",rows)
		#Отключение от базы данных mysql
		db.mysql.disconnect()
		#end of function suite
		#Функция вставляет строки и ничего не возвращает
		return

	def delete():
		"This function deletes all records in mysql table"
		#print (_1saccs.delete.__doc__)
		#beginning of function suite
		#Подключение к базе данных mysql
		db.mysql.connect()
		#Из таблицы 1s_1sentry в mysql удаляются все записи:
		db.mysql.cursor.execute("DELETE FROM 1s_1saccs")
		#Отключение от базы данных mysql
		db.mysql.disconnect()
		#end of function suite
		#Функция удаляет строки и ничего не возвращает
		return

	#def update_promt(cache=basic.cache):
	#	"This function updates data in mysql from ODBC"
	#	#print (_1saccs.update_promt.__doc__)
	#	#beginning of function suite
	#	_1saccs.delete()
	#	db.odbc.connect()
	#	_1saccs.extract()
	#	array=_1saccs.fetch(cache)
	#	while array!=[]:
	#		_1saccs.insert(array)
	#	db.odbc.disconnect()
	#	#end of function suite
	#	#Функция обновляет таблицу и ничего не возвращает
	#	return

	def update(cache=cache):
		"This function updates data in mysql from ODBC"
		#print (_1saccs.update_old.__doc__)
		#beginning of function suite
		records=0
		_1saccs.delete()
		db.odbc.connect()
		_1saccs.extract()
		array=_1saccs.fetch(cache)
		while array!=[]:
			records=records+len(array)
			_1saccs.insert(_1saccs.transform(array))
			array=_1saccs.fetch(cache)
		db.odbc.disconnect()
		return records
	
	#end of class suite
	
class sc112:
	"This class contains functions to import data from ODBC into mysql"
	#beginning of class suite
	
	def extract():
		"This function extracts data from ODBC into cursor"
		#print (sc112.extract.__doc__)
		#beginning of function suite
		# Выполнение запроса на выборку из таблицы SC133
		db.odbc.cursor.execute('''SELECT id, parentid, code, descr, parentext, isfolder, ismark, verstamp, DTOC(sp13387) as "sp13387", DTOC(sp13386) as "sp13386", sp15926, sp15927, DTOC(sp21310) as "sp21310", DTOC(sp21311) as "sp21311", sp21312, sp21313, sp21522, sp22894, sp22895, sp22896, sp22897, sp25230 FROM SC112.DBF;''')
		#end of function suite
		#Функция создает курсор и ничего не возвращает
		return

	def fetch(n):
		"This function fetches data from cursor"
		#print (sc112.fetch.__doc__)
		#beginning of function suite
		#end of function suite
		#Функция возвращает следующие n строк из курсора
		return db.odbc.cursor.fetchmany(n)

	def fetchall():
		"This function fetches all data from cursor"
		#print (sc112.fetchall.__doc__)
		#beginning of function suite
		#end of function suite
		#Функция возвращает все строки из курсора
		return db.odbc.cursor.fetchall()

	def transform(array):
		"This function transforms data from array"
		#print (sc112.transform.__doc__)
		#beginning of function suite
		#Создается пустой массив rows
		rows=[]
		#Для каждого элемента-списка массива rows:
		for item in array:
			#Создается пустой список row
			row=[]
			#В список добавляются декодированные при необходимости в utf-8 элементы списка item
			row.append(item[0])
			row.append(item[1])
			row.append(item[2])
			row.append(item[3].decode('cp1251'))
			row.append(item[4])
			row.append(item[5])
			row.append(item[6])
			row.append(item[7])
			row.append(item[8])
			row.append(item[9])
			row.append(item[10])
			row.append(item[11])
			row.append(item[12])
			row.append(item[13])
			row.append(item[14])
			row.append(item[15])
			row.append(item[16])
			row.append(item[17])
			row.append(item[18])
			row.append(item[19])
			row.append(item[20])
			row.append(item[21])
			#В массив rows добавляется список row
			rows.append(row)
		#end of function suite
		#Функция возвращает массив rows
		return rows

	def insert(rows):
		"This function inserts into mysql"
		#print (sc112.transform.__doc__)
		#beginning of function suite
		#Подключение к базе данных mysql
		db.mysql.connect()
		#В таблицу 1s_sc112 в mysql добавляется массив rows
		db.mysql.cursor.executemany("INSERT INTO 1s_sc112(id, parentid, code, descr, parentext, isfolder, ismark, verstamp, sp13387, sp13386, sp15926, sp15927, sp21310, sp21311, sp21312, sp21313, sp21522, sp22894, sp22895, sp22896, sp22897, sp25230) VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",rows)
		#Отключение от базы данных mysql
		db.mysql.disconnect()
		#end of function suite
		#Функция вставляет строки и ничего не возвращает
		return

	def delete():
		"This function deletes all records in mysql table"
		#print (sc112.delete.__doc__)
		#beginning of function suite
		#Подключение к базе данных mysql
		db.mysql.connect()
		#Из таблицы sc112 в mysql удаляются все записи:
		db.mysql.cursor.execute("DELETE FROM 1s_sc112")
		#Отключение от базы данных mysql
		db.mysql.disconnect()
		#end of function suite
		#Функция удаляет строки и ничего не возвращает
		return

	def update(cache=cache):
		"This function updates data in mysql from ODBC"
		#print (sc112.update_old.__doc__)
		#beginning of function suite
		records=0
		sc112.delete()
		db.odbc.connect()
		sc112.extract()
		array=sc112.fetch(cache)
		while array!=[]:
			records=records+len(array)
			sc112.insert(sc112.transform(array))
			array=sc112.fetch(cache)
		db.odbc.disconnect()
		return records
	
	#def update_promt(cache=basic.cache):
	#	"This function updates data in mysql from ODBC"
	#	#print (sc112.update_promt.__doc__)
	#	#beginning of function suite
	#	sc112.delete()
	#	db.odbc.connect()
	#	sc112.extract()
	#	array=_1saccs.fetch(cache)
	#	while array!=[]:
	#		sc112.insert(array)
	#	db.odbc.disconnect()
	#	#end of function suite
	#	#Функция обновляет таблицу и ничего не возвращает
	#	return
	
	#end of class suite

class sc133:
	"This class contains functions to import data from ODBC into mysql"
	#beginning of class suite
	
	def extract():
		"This function extracts data from ODBC into cursor"
		#print (sc133.extract.__doc__)
		#beginning of function suite
		# Выполнение запроса на выборку из таблицы SC112
		db.odbc.cursor.execute('''SELECT id, parentid, code, descr, isfolder, sp121, sp123, sp124, SP125, sp126, sp127, sp128, sp129, DTOC(sp130), sp131 FROM SC133.DBF;''')
		#end of function suite
		#Функция создает курсор и ничего не возвращает
		return

	def fetch(n):
		"This function fetches data from cursor"
		#print (sc133.fetch.__doc__)
		#beginning of function suite
		#end of function suite
		#Функция возвращает следующие n строк из курсора
		return db.odbc.cursor.fetchmany(n)

	def fetchall():
		"This function fetches all data from cursor"
		#print (sc133.fetchall.__doc__)
		#beginning of function suite
		#end of function suite
		#Функция возвращает все строки из курсора
		return db.odbc.cursor.fetchall()

	def transform(array):
		"This function transforms data from array"
		#print (sc133.transform.__doc__)
		#beginning of function suite
		#Создается пустой массив rows
		rows=[]
		#Для каждого элемента-списка массива rows:
		for item in array:
			#Создается пустой список row
			row=[]
			#В список добавляются декодированные при необходимости в utf-8 элементы списка item
			row.append(item[0])
			row.append(item[1])
			row.append(item[2])
			row.append(item[3].decode('cp1251'))
			row.append(item[4])
			row.append(item[5])
			row.append(item[6].decode('cp1251'))
			row.append(item[7].decode('cp1251'))
			row.append(item[8].decode('cp1251'))
			row.append(item[9].decode('cp1251'))
			row.append(item[10].decode('cp1251'))
			row.append(item[11].decode('cp1251'))
			row.append(item[12].decode('cp1251'))
			row.append(item[13])
			row.append(item[14])
			#В массив rows добавляется список row
			rows.append(row)
		#end of function suite
		#Функция возвращает массив rows
		return rows

	def insert(rows):
		"This function inserts into mysql"
		#print (sc133.transform.__doc__)
		#beginning of function suite
		#Подключение к базе данных mysql
		db.mysql.connect()
		#В таблицу 1s_sc133 в mysql добавляется массив rows
		db.mysql.cursor.executemany("INSERT INTO 1s_sc133(id, parentid, code, descr, isfolder, sp121, sp123, sp124, SP125, sp126, sp127, sp128, sp129, sp130, sp131) VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",rows)
		#Отключение от базы данных mysql
		db.mysql.disconnect()
		#end of function suite
		#Функция вставляет строки и ничего не возвращает
		return

	def delete():
		"This function deletes all records in mysql table"
		#print (sc133.delete.__doc__)
		#beginning of function suite
		#Подключение к базе данных mysql
		db.mysql.connect()
		#Из таблицы sc133 в mysql удаляются все записи:
		db.mysql.cursor.execute("DELETE FROM 1s_sc133")
		#Отключение от базы данных mysql
		db.mysql.disconnect()
		#end of function suite
		#Функция удаляет строки и ничего не возвращает
		return

	def update(cache=cache):
		"This function updates data in mysql from ODBC"
		#print (sc133.update_old.__doc__)
		#beginning of function suite
		records=0
		sc133.delete()
		db.odbc.connect()
		sc133.extract()
		array=sc133.fetch(cache)
		while array!=[]:
			records=records+len(array)
			sc133.insert(sc133.transform(array))
			array=sc133.fetch(cache)
		db.odbc.disconnect()
		return records
	
	#end of class suite

class sc11305:
	"This class contains functions to import data from ODBC into mysql"
	#beginning of class suite
	
	def extract():
		"This function extracts data from ODBC into cursor"
		#print (sc11305.extract.__doc__)
		#beginning of function suite
		# Выполнение запроса на выборку из таблицы sc11305
		db.odbc.cursor.execute('''SELECT id, code, descr, sp25228, sp25229 FROM sc11305.DBF;''')
		#end of function suite
		#Функция создает курсор и ничего не возвращает
		return

	def fetch(n):
		"This function fetches data from cursor"
		#print (sc11305.fetch.__doc__)
		#beginning of function suite
		#end of function suite
		#Функция возвращает следующие n строк из курсора
		return db.odbc.cursor.fetchmany(n)

	def fetchall():
		"This function fetches all data from cursor"
		#print (sc11305.fetchall.__doc__)
		#beginning of function suite
		#end of function suite
		#Функция возвращает все строки из курсора
		return db.odbc.cursor.fetchall()

	def transform(array):
		"This function transforms data from array"
		#print (sc11305.transform.__doc__)
		#beginning of function suite
		#Создается пустой массив rows
		rows=[]
		#Для каждого элемента-списка массива rows:
		for item in array:
			#Создается пустой список row
			row=[]
			#В список добавляются декодированные при необходимости в utf-8 элементы списка item
			row.append(item[0])
			row.append(item[1].decode('cp1251'))
			row.append(item[2].decode('cp1251'))
			row.append(item[3].decode('cp1251'))
			row.append(item[4].decode('cp1251'))
			#В массив rows добавляется список row
			rows.append(row)
		#end of function suite
		#Функция возвращает массив rows
		return rows

	def insert(rows):
		"This function inserts into mysql"
		#print (sc11305.transform.__doc__)
		#beginning of function suite
		#Подключение к базе данных mysql
		db.mysql.connect()
		#В таблицу 1s_sc11305 в mysql добавляется массив rows
		db.mysql.cursor.executemany("INSERT INTO 1s_sc11305(id, code, descr, sp25228, sp25229) VALUES(%s, %s, %s, %s, %s)",rows)
		#Отключение от базы данных mysql
		db.mysql.disconnect()
		#end of function suite
		#Функция вставляет строки и ничего не возвращает
		return

	def delete():
		"This function deletes all records in mysql table"
		#print (sc11305.delete.__doc__)
		#beginning of function suite
		#Подключение к базе данных mysql
		db.mysql.connect()
		#Из таблицы sc11305 в mysql удаляются все записи:
		db.mysql.cursor.execute("DELETE FROM 1s_sc11305")
		#Отключение от базы данных mysql
		db.mysql.disconnect()
		#end of function suite
		#Функция удаляет строки и ничего не возвращает
		return

	def update(cache=cache):
		"This function updates data in mysql from ODBC"
		#print (sc11305.update_old.__doc__)
		#beginning of function suite
		records=0
		sc11305.delete()
		db.odbc.connect()
		sc11305.extract()
		array=sc11305.fetch(cache)
		while array!=[]:
			records=records+len(array)
			sc11305.insert(sc11305.transform(array))
			array=sc11305.fetch(cache)
		db.odbc.disconnect()
		return records
	
	#end of class suite

class _1sblob:
	"This class contains functions to import data from ODBC into mysql"
	#beginning of class suite
	
	def extract():
		"This function extracts data from ODBC into cursor"
		#print (_1sblob.extract.__doc__)
		#beginning of function suite
		# Выполнение запроса на выборку из таблицы 1sblob
		db.odbc.cursor.execute('''SELECT fieldid, objid, blockno, block FROM 1sblob.DBF;''')
		#end of function suite
		#Функция создает курсор и ничего не возвращает
		return

	def fetch(n):
		"This function fetches data from cursor"
		#print (_1sblob.fetch.__doc__)
		#beginning of function suite
		#end of function suite
		#Функция возвращает следующие n строк из курсора
		return db.odbc.cursor.fetchmany(n)

	def fetchall():
		"This function fetches all data from cursor"
		#print (_1sblob.fetchall.__doc__)
		#beginning of function suite
		#end of function suite
		#Функция возвращает все строки из курсора
		return db.odbc.cursor.fetchall()

	def transform(array):
		"This function transforms data from array"
		#print (_1sblob.transform.__doc__)
		#beginning of function suite
		#Создается пустой массив rows
		rows=[]
		#Для каждого элемента-списка массива rows:
		for item in array:
			#Создается пустой список row
			row=[]
			#В список добавляются декодированные при необходимости в utf-8 элементы списка item
			row.append(item[0])
			row.append(item[1])
			row.append(item[2])
			row.append(item[3].decode('cp1251'))
			#В массив rows добавляется список row
			rows.append(row)
		#end of function suite
		#Функция возвращает массив rows
		return rows

	def insert(rows):
		"This function inserts into mysql"
		#print (_1sblob.transform.__doc__)
		#beginning of function suite
		#Подключение к базе данных mysql
		db.mysql.connect()
		#В таблицу 1s_sc11305 в mysql добавляется массив rows
		db.mysql.cursor.executemany("INSERT INTO 1s_1sblob(fieldid, objid, blockno, block) VALUES(%s, %s, %s, %s)",rows)
		#Отключение от базы данных mysql
		db.mysql.disconnect()
		#end of function suite
		#Функция вставляет строки и ничего не возвращает
		return

	def delete():
		"This function deletes all records in mysql table"
		#print (_1sblob.delete.__doc__)
		#beginning of function suite
		#Подключение к базе данных mysql
		db.mysql.connect()
		#Из таблицы 1s_1sblob в mysql удаляются все записи:
		db.mysql.cursor.execute("DELETE FROM 1s_1sblob")
		#Отключение от базы данных mysql
		db.mysql.disconnect()
		#end of function suite
		#Функция удаляет строки и ничего не возвращает
		return

	def update(cache=cache):
		"This function updates data in mysql from ODBC"
		#print (_1sblob.update.__doc__)
		#beginning of function suite
		records=0
		_1sblob.delete()
		db.odbc.connect()
		_1sblob.extract()
		array=_1sblob.fetch(cache)
		while array!=[]:
			records=records+len(array)
			_1sblob.insert(_1sblob.transform(array))
			array=_1sblob.fetch(cache)
		db.odbc.disconnect()
		return records
	
	#end of class suite


class partner:
	"This class contains functions to import data from ODBC into mysql"
	#beginning of class suite
	
	def extract():
		"This function extracts data from ODBC into cursor"
		#print (partner.extract.__doc__)
		#beginning of function suite
		# Выполнение запроса на выборку из таблицы 1sblob
		db.odbc.cursor.execute('''SELECT d.id as "x_1s_id", 

LEFT(PADR(SUBSTR((a.block + NVL(b.block,"") + NVL(c.block,"")),10,VAL("0x"+(ALLTRIM(SUBSTR(a.block,1,9))))),230),128) as "name",

PADR(SUBSTR((a.block + NVL(b.block,"") + NVL(c.block,"")),10,VAL("0x"+(ALLTRIM(SUBSTR(a.block,1,9))))),230) as "x_1s_name"

FROM SC133.DBF d, 

1SBLOB a 
LEFT JOIN 1SBLOB.DBF b ON a.objid=b.objid and a.fieldid=b.fieldid and b.blockno=1 
LEFT JOIN 1SBLOB.DBF c ON a.objid=c.objid and a.fieldid=c.fieldid and c.blockno=2 

WHERE alltrim(a.fieldid)="3E" and a.blockno=0 and d.id=a.objid;''')
		#end of function suite
		#Функция создает курсор и ничего не возвращает
		return

	def fetch(n):
		"This function fetches data from cursor"
		#print (partner.fetch.__doc__)
		#beginning of function suite
		#end of function suite
		#Функция возвращает следующие n строк из курсора
		return db.odbc.cursor.fetchmany(n)

	def fetchall():
		"This function fetches all data from cursor"
		#print (partner.fetchall.__doc__)
		#beginning of function suite
		#end of function suite
		#Функция возвращает все строки из курсора
		return db.odbc.cursor.fetchall()

	def transform(array):
		"This function transforms data from array"
		#print (partner.transform.__doc__)
		#beginning of function suite
		#Создается пустой массив rows
		rows=[]
		#Для каждого элемента-списка массива rows:
		for item in array:
			#Создается пустой список row
			row=[]
			#В список добавляются декодированные при необходимости в utf-8 элементы списка item
			row.append(item[0])
			row.append(item[1].decode('cp1251'))
			row.append(item[2].decode('cp1251'))
			#В массив rows добавляется список row
			rows.append(row)
		#end of function suite
		#Функция возвращает массив rows
		return rows

	def insert(rows):
		"This function inserts into mysql"
		#print (partner..transform.__doc__)
		#beginning of function suite
		#Подключение к базе данных mysql
		db.mysql.connect()
		#В таблицу 1s_partner в mysql добавляется массив rows
		db.mysql.cursor.executemany("INSERT INTO 1s_partner(x_1s_id, name, x_1s_name) VALUES(%s, %s, %s)",rows)
		#Отключение от базы данных mysql
		db.mysql.disconnect()
		#end of function suite
		#Функция вставляет строки и ничего не возвращает
		return

	def delete():
		"This function deletes all records in mysql table"
		#print (partner.delete.__doc__)
		#beginning of function suite
		#Подключение к базе данных mysql
		db.mysql.connect()
		#Из таблицы 1s_partner в mysql удаляются все записи:
		db.mysql.cursor.execute("DELETE FROM 1s_partner")
		#Отключение от базы данных mysql
		db.mysql.disconnect()
		#end of function suite
		#Функция удаляет строки и ничего не возвращает
		return

	def update(cache=cache):
		"This function updates data in mysql from ODBC"
		#print (partner.update.__doc__)
		#beginning of function suite
		records=0
		partner.delete()
		db.odbc.connect()
		partner.extract()
		array=partner.fetch(cache)
		while array!=[]:
			records=records+len(array)
			partner.insert(partner.transform(array))
			array=partner.fetch(cache)
		db.odbc.disconnect()
		return records
	
	#end of class suite

